C++笔记


bits/stdc++|limits.h|strncasecmp|文件重定向|vector初始化|const在函数名后面|
struct_class|内联函数与宏定义|vector的capacity

头文件集合

里面包含了常用头文件,可以在linux的该目录下查看此文件:/usr/include/x86_64-linux-gnu/c++/7/bits/

1
#include <bits/stdc++.h>

limits.h

各种数据的范围,常用的有以下几个:

1
2
3
4
5
6
7
8
9
10
#  define INT_MIN	(-INT_MAX - 1)
# define INT_MAX 2147483647

/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)

strncasecmp

比较字符串时忽略大小写

1
2
3
4
相关函数:bcmp, memcmp, strcmp, strcoll, strncmp
表头文件:#include <strings.h>
函数定义:int strncasecmp(const char *s1, const char *s2, size_t n)
函数说明:strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。

文件重定向

1
test <datain.txt>dataout.txt

使用数组初始化vector

1
2
int a[10];
vector v1(begin(a),begin(a)+10);

使用”范围for”遍历二维数组

1
2
3
4
5
6
7
8

int a[20][20]={0};
for(auto &row:a){
for(auto col:row){
cout<<col<<" ";
}
cout<<endl;
}

const在函数名后面

表示该函数是常成员函数.
要访问常量成员只能用常成员函数.

struct & class

C++ primer::”使用class和struct定义类的唯一区别就是默认的访问权限”;

1
2
3
4
5
6
7
8
9
10
11
12
13
struct node{
int a;
public:
void getA(){return a;}
void setA(int t){a=t;}
};
class node{
int a;
public:
void getA(){return a;}
void setA(int t){a=t;}
};
//第一个的a默认public,第二个的a默认private.

内联函数与宏定义的区别

两者都会将代码在相应位置展开,但是
宏定义会在所有地方将其进行替换,不进行类型检查等操作,只是死板的替换.
内联函数的本质还是函数,会有类型语法的检查,然后在调用的地方进行展开.并且如果函数太复杂,编译器就会将其当成普通函数处理.

vector的capacity

1
2
在使用push_back()不断地往vector中添加数据时,由于vector刚开始分配的内存并没有这么大,所以随着数据不断增多,可能会重新分配空间,然后把源数据拷贝过去.所以如果知道数据的个数,可以先使用reserve()函数分配足够空间.
ps: ivec.reserve(1e9);

欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/